package com.music.mapper;

import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

@Mapper
public interface FavListMapper {
    // 添加新歌单的方法，接收一个包含歌单信息的 Map 对象作为参数
    //@Options 注解用于获取自动生成的 ListID。
    @Insert("INSERT INTO favouriteList (ListName, user_id, song_id, Bio) VALUES (#{ListName}, #{user_id}, #{song_id}, #{Bio})")
    @Options(useGeneratedKeys = true, keyProperty = "ListID", keyColumn = "ListID")
    int addFavouriteList(Map<String, Object> favouriteList);

    // 查询所有歌单的方法，返回一个包含所有歌单信息的列表
    @Select("SELECT * FROM favouriteList")
    List<Map<String, Object>> showAllFavouriteLists();

    // 根据歌单 ID 删除歌单的方法，接收一个歌单 ID 作为参数
    @Delete("DELETE FROM favouriteList WHERE ListID = #{ListID}")
    int deleteFavouriteList(int ListID);

    // 向歌单中添加歌曲的方法，接收一个包含歌单 ID 和歌曲 ID 的 Map 对象作为参数
    @Update("UPDATE favouriteList SET song_id = #{song_id} WHERE ListID = #{ListID}")
    int addSongToFavouriteList(Map<String, Object> songInfo);

    // 更新歌单信息的方法，接收一个包含歌单信息的 Map 对象作为参数
    @Update("UPDATE favouriteList SET ListName = #{ListName}, user_id = #{user_id}, song_id = #{song_id}, Bio = #{Bio} WHERE ListID = #{ListID}")
    int updateFavouriteList(Map<String, Object> favouriteList);

    // 根据歌单 ID 查询歌单中的所有音乐的方法，接收一个歌单 ID 作为参数
    @Select("SELECT s.* FROM songs s JOIN favouriteList fl ON s.song_id = fl.song_id WHERE fl.ListID = #{ListID}")
    List<Map<String, Object>> showSongsByListId(int ListID);
}
